JupyterHubのDockerSpawnerで起動するイメージを替える
データアナリティクス事業本部の鈴木です。
今回は、JupyterHubのDockerSpawnerで起動するイメージを替える方法を紹介します。
DockerSpawnerとは
DockerSpawnerは、JupyterHub Docker Spawnerの一つで、JupyterHubで認証されたユーザーを受け取り、そのユーザーのためにDockerコンテナ内にノートブックサーバーをspawnします。
コンテナとしては、例えば、Jupyter Docker Stacksのイメージを起動することができます。イメージにインストールされていないPythonのモジュールなどは自分でDockerfileを書くなどしてインストールする必要があるものの、Python・R・JuliaなどのインストールやJupyterLab環境の構築が不要になり、かなり楽にデータ分析環境の構築ができます。
Running a Container Using JupyterHub — docker-stacks latest documentation
Jupyter Docker Stacksのイメージで新しいものや、ライブラリを追加したイメージを起動したくなった場合は、JupyterHubの設定ファイルを修正することで簡単に替えることができますが、この記事では具体的にどのような手順になるのか確認します。
前提
環境
- macOS Catalina バージョン10.15.7
- JupyterHub 1.4.2
- DockerSpawner 12.1.0
- Docker version 20.10.7
変更前の状況の確認
既にJupyterHubの環境が構築済みで、DockerSpawnerからjupyter/datascience-notebookのあるタグのイメージを起動するよう設定されているとします。
以下はJupyterHubが読み込む設定ファイルであるjupyterhub_config.pyの該当箇所の抜粋です。
# 抜粋 c.DockerSpawner.image = 'jupyter/datascience-notebook:2021-10-07'
イメージはc.DockerSpawner.image
に設定します。詳しくはDockerSpawner APIドキュメントをご確認ください。
例えばPlotlyを使いたいとき、このイメージにはPlotlyが入っていないので、そのままだとimportできません。コンテナを起動した際にpipでインストールするか、インストール済みのイメージを作る必要があります。
やってみる
差し替えるイメージをビルドする
jupyter/datascience-notebookをベースに、追加したいライブラリをインストールしたイメージをビルドします。
ビルドの手順を簡単に確認します。 手順の細かい説明は以下の記事に記載しましたので、併わせてご確認ください。
まず、requirements.txtを作成します。
plotly == 5.3.1
次にDockerfileを作成します。
FROM jupyter/datascience-notebook:2021-10-07 # 追加モジュールのインストール COPY --chown=${NB_UID}:${NB_GID} requirements.txt /tmp/ RUN pip install --quiet --no-cache-dir --requirement /tmp/requirements.txt && \ fix-permissions "${CONDA_DIR}" && \ fix-permissions "/home/${NB_USER}" WORKDIR "${HOME}"
Dockerfileとrequirements.txtがあるディレクトリでdocker build
を実行します。
イメージの名前とタグは分かりやすいものにしておきます。
docker build --rm -t nayuts/my-datascience-notebook:2021-10-07 .
念のため、イメージができているかdocker images
で確認しておきましょう。
docker images # REPOSITORY TAG IMAGE ID CREATED SIZE # nayuts/my-datascience-notebook 2021-10-07 xxxxxxxxxxxx About a minute ago 4.18GB
jupyterhub_config.pyの起動するイメージの指定を修正する
jupyterhub_config.pyのc.DockerSpawner.image
で指定しているイメージを、先ほどビルドしたイメージに修正します。
# 抜粋 c.DockerSpawner.image = 'nayuts/my-datascience-notebook:2021-10-07'
JupyterHubを再起動する
jupyterhub_config.pyをリロードするために、JupyterHubを再起動します。
なお、リロードのためにJupyterHubの再起動が必要であることは、以下のIssueを参考にしました。
/hub/home
などに移動し、Adminボタンを押してAdmin画面に移動します。Shutdown Hubボタンでサーバーをシャットダウンします。
シャットダウンが確認できたら、再度JupyterHubを起動します。
jupyterhub -f jupyterhub_config.py
イメージが替わっていることを確認する
JupyterHubにログインして、コンテナを起動し、Plotlyが使用できることを確認します。
Plotlyの5.3.1がインストールされており、正常に散布図が描けることも確認できました。
最後に
今回は、JupyterHubのDockerSpawnerで起動するイメージを替える方法を確認しました。
JupyterHubの設定ファイルを修正する必要はありますが、新しいイメージを作成し、JupyterHubが起動時に読み込む設定ファイルのc.DockerSpawner.image
を修正するだけで、起動するイメージを切り替えることができました。